from abc import ABC, abstractmethod


class Invoice(ABC):
    @property
    @abstractmethod
    def invoice_number(self) -> int:
        raise NotImplementedError("Subclasses must implement this method")

    @property
    @abstractmethod
    def date(self) -> str:
        raise NotImplementedError("Subclasses must implement this method")

    @property
    @abstractmethod
    def amount(self) -> float:
        raise NotImplementedError("Subclasses must implement this method")
